import { ECSEntity } from "./ECSEntity";
import { ECSRootSystem, ECSSystem } from "./ECSSystem";


export namespace ecs {
    /** 实体 - 一个概念上的定义，指的是游戏世界中的一个独特物体，是一系列组件的集合 */
    export type Entity = ECSEntity;
    /** 根系统 - 驱动游戏中所有系统工作 */
    export type RootSystem = ECSRootSystem;
    /** 系统 - 关注实体上组件数据变化，处理游戏逻辑 */
    export type System = ECSSystem;

     /** 根系统 - 驱动游戏中所有系统工作 */
    export const RootSystem = ECSRootSystem;
    /** 实体 - 一个概念上的定义，指的是游戏世界中的一个独特物体，是一系列组件的集合 */
    export const Entity = ECSEntity;
     /** 系统 - 关注实体上组件数据变化，处理游戏逻辑 */
    export const System = ECSSystem;

    export interface IComp{
        canRecycle:boolean;
        ent:Entity;

        reset():void;
    }
    export interface IMatcher{
        mid:number;
        indices:number[];
        key:string;
        isMatch(entity:Entity):boolean
    }
    
    export interface IEntityEnterSystem<E extends Entity=Entity>{
        entityEnter(entity: E): void;
    }

    export interface ISystemFirstUpdate<E extends Entity = Entity>{
        firstUpdate(entity:E):void;
    }

    export interface ISystemUpdate<E extends Entity = Entity>{
        udpate(entity:E):void;
    }

    export interface IEntityRemoveSystem<E extends Entity = Entity>{
        entityRemove(entity:E):void;
    }
}